<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>

</body>
<script>
    // 函数就是封装了一段可以被 重复调用执行的代码块。目的：让大量代码重复使用
    // 利用函数计算1-100的累加和
    function getSum() {
        var sum = 0
        for (var i = 1; i <= 100; i++) {
            sum += i
        }
        console.log(sum);
    }
    getSum()
    console.log('**********************************************************');
    // 实参和形参
    function cook(arua) {
        console.log(arua);
    }
    cook('酸辣土豆丝')
    cook('糖醋小排')
    console.log('**********************************************************');
    // 求任意两数之和
    function getSum1(num1, num2) {
        var sum = 0
        for (var i = num1; i <= num2; i++) {
            sum += i
        }
        console.log(sum);
    }
    getSum1(1, 100)
    getSum1(1, 50)
    getSum1(10, 99)
    // 实参与形参个数相等时：正常输出
    // 实参的个数大于形参的个数：取到形参的个数
    // 实参的个数小于形参的个数：形参有未接收的值为undefined,输出结果为NAN
    console.log('**********************************************************');
    function getSum2(num1, num2) {
        return num1 + num2
    }
    console.log(getSum2(1, 2));

    // return特性

    // return后面的代码不会被执行
    // return只能输出一个值，返回多个值后只取最后一个返回，除非把多个结果包含在一个数组里面，
    // return可以返回一个数组。
    // 我没点函数如果有return，则返回return后面的值，如果没有return，则返回undefined

    // return,break,continue的区别：
    // break:结束当前的循环体
    // continue:结束本次循环，继续执行下次的循环
    // return:不仅可以退出循环，还能够返回return语句中的值
    // 同时还可以结束当前函数体内的代码

    // 判断是否是闰年
    // function isRunYear(year){
    //     var flag = false
    //     if(year%4==0 && year%100!=0 || year%400==0){
    //         flag=true
    //     }
    //     return flag
    // }
    // console.log(isRunYear(2020));
    // console.log(isRunYear(2021));

    console.log('**********************************************************');
    // 用户输入三个数字并输出最大值
    // var num1 = prompt('请输入一个数字：')
    // var num2 = prompt('请输入一个数字：')
    // var num3 = prompt('请输入一个数字：')
    // function reMax(arr) {
    //     var max= arr[0]
    //     for(var i=1;i<arr.length;i++){
    //         if(arr[i]>max){
    //             max=arr[i]
    //         }
    //     }
    //     return max
    // }
    // console.log(reMax([num1,num2,num3]));


    //     arguments的使用
    // arguments主要作用：里面存储了所有传递来的实参，展示参数形式为伪数组，伪数组特性：
    // 伪数组并不是真正的数组，具有数组的length属性，按照索引的方式进行存储，没有数组的一些方法 pop(),push()
    // function fn(){
    //     console.log(arguments);
    // }
    // fn(1,2,3)
    // 当不知道用户将输入几个实参时，应该用arguments，
    // arguments是函数内置对象，每个函数都有的，不用再声明。

    // 利用函数求人一个数的最大值
    function getMax() {
        var max = arguments[0]
        for (var i = 1; i < arguments.length; i++) {
            if (arguments[i] > max) {
                max = arguments[i]
            }
        }
        return max
    }
    console.log(getMax(1, 2, 3, 4));
    console.log(getMax(12, 23, 34, 24, 35, 56, 465));

    console.log('**********************************************************');

    // 函数的相互调用
    function fn1() {
        console.log(111);
        fn2()
        console.log('fn1');
    }
    function fn2() {
        console.log(222);
        console.log('fn2');
    }
    fn1()
    console.log('**********************************************************');
    // 经典案例，用户输入年份，判断当前二月份的天数

    function backDay() {
        var year = prompt('请输入年份：')
        if (getYear(year)) {
            console.log(29 + '天');
        } else {
            console.log(28 + '天');
        }
    }
    backDay()
    function getYear(year) {
        var flag = false
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            flag = true
        }
        return flag
    }

    // 函数的两种声明方式
    // 1.利用函数关键字自定义函数
    // function fn（）{
    // }
    // fn（）
    // 2.函数表达式声明函数  匿名函数
    // var 变量名 = function（）{ }
    // 变量名（）



</script>

</html>